import requests
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
print(f"Python解释器路径: {sys.executable}")
print(f"Python版本: {sys.version}")
print("尝试导入pymysql模块...")
try:
    import pymysql
    print(f"成功导入pymysql模块，版本: {pymysql.__version__}")
except ImportError as e:
    print(f"导入pymysql失败: {e}")
    print("Python模块搜索路径:")
    for path in sys.path:
        print(f"  {path}")
    sys.exit(1)

import json
import time

# 从数据库中查询没有分析的古诗
def get_unanalyzed_poems():
    """
    从数据库中查询没有分析的古诗
    """
    # 连接数据库
    conn = pymysql.connect(host='192.140.166.115', user='phoenixfm_cn', password='3b7SiXCWSe8B6pyi', database='phoenixfm_cn')
    cursor = conn.cursor()
    
    # 查询没有分析的古诗
    query = "SELECT id, title, content FROM zd_gushi WHERE appreciation IS NULL limit 1000"
    cursor.execute(query)
    poems = cursor.fetchall()
    
    # 关闭数据库连接
    cursor.close()
    conn.close()
    
    return poems

# 分析古诗
def analyze_poems():
    """
    分析数据库中没有分析的古诗
    """
    # 获取没有分析的古诗
    poems = get_unanalyzed_poems()
    
    if not poems:
        print("没有没有分析的古诗")
        return
    
    # 分析每个古诗
    for poem_id, poem_title, poem_content in poems:
        print(f"分析古诗ID: {poem_id}，标题: {poem_title}")
        poem_content = poem_title + poem_content.replace("\n", "")

        result = analyze_poem(poem_content, API_KEY, SECRET_KEY)
        try:
            result_dict = json.loads(result)
        except json.JSONDecodeError:
            result_dict = {}
        annotations = result_dict.get("annotations", "")
        translation = result_dict.get("translation", "")
        appreciation = result_dict.get("appreciation", "")
        background = result_dict.get("background", "")

        # 连接数据库
        conn = pymysql.connect(host='192.140.166.115', user='phoenixfm_cn', password='3b7SiXCWSe8B6pyi', database='phoenixfm_cn')
        cursor = conn.cursor()
        # 保存分析结果到数据库
        update_query = "UPDATE zd_gushi SET appreciation = %s, translation = %s, annotations = %s, background = %s WHERE id = %s"
        cursor.execute(update_query, (appreciation, translation, annotations, background, poem_id))
        conn.commit()
        # 关闭数据库连接
        cursor.close()
        conn.close()
        print(poem_id)

        print(f"分析完成，结果已保存到数据库")
        time.sleep(1)  # 避免频繁请求



def analyze_poem(poem_content, api_key, secret_key):
    """
    调用文心一言API分析古诗或古文，返回包含注释、译文、赏析和创作背景的JSON
    
    参数:
        poem_content: 古诗或古文内容
        api_key: 文心一言API的API Key
        secret_key: 文心一言API的Secret Key
    
    返回:
        包含注释、译文、赏析和创作背景的JSON字符串
    """
    # 1. 获取访问令牌
    def get_access_token():
        """获取文心一言API的访问令牌"""
        url = f"https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={api_key}&client_secret={secret_key}"
        
        payload = json.dumps("")
        headers = {
            'Content-Type': 'application/json',
            'Accept': 'application/json'
        }
        
        response = requests.request("POST", url, headers=headers, data=payload)
        return response.json().get("access_token")
    
    # 获取访问令牌
    access_token = get_access_token()
    if not access_token:
        return json.dumps({"error": "无法获取访问令牌，请检查API密钥"})
    
    # 2. 构造提示词
    prompt = f"""请分析以下古诗或古文，并按照要求的格式返回四个部分的内容：注释、译文、赏析和创作背景。每个部分之间必须用两个换行符(\n\n)分隔开，确保可以被正确分割。

古诗内容：
{poem_content}

具体要求：
1. 注释：为诗中重点词语提供解释，使用HTML的ul和li标签，每个词语及其解释放在li标签内，li标签内包含两个span，第一个span显示词语（class为"font-medium min-w-[80px]"），第二个span显示解释（class为"text-ink/80"）。ul的class为"space-y-3 text-ink/80"。

2. 译文：提供现代文翻译，先添加一个h3标题"现代文译文"（class为"font-song font-bold text-lg mb-4"），然后将译文分成适当的段落，每个段落用p标签包裹（class为"text-ink/80 leading-relaxed mb-4"），最后一段p标签不需要mb-4。

3. 赏析：对诗文进行赏析，先添加一个h3标题"诗文赏析"（class为"font-song font-bold text-lg mb-4"），然后内容用p标签包裹（class为"text-ink/80 leading-relaxed mb-4"），最后一段p标签不需要mb-4。

4. 创作背景：介绍诗文的创作背景，先添加一个h3标题"创作背景"（class为"font-song font-bold text-lg mb-4"），然后内容用p标签包裹（class为"text-ink/80 leading-relaxed mb-4"），最后一段p标签不需要mb-4。

请严格按照上述格式返回，不要添加任何额外内容，确保每个部分的HTML格式正确，且四个部分之间用两个换行符(\n\n)分隔开。"""
    
    # 3. 调用文心一言API
    url = f"https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token={access_token}"
    
    payload = json.dumps({
        "messages": [
            {
                "role": "user",
                "content": prompt
            }
        ],
        "temperature": 0.7,
        "top_p": 0.95,
        "penalty_score": 1.0
    })
    
    headers = {
        'Content-Type': 'application/json'
    }
    
    try:
        response = requests.request("POST", url, headers=headers, data=payload)
        response_data = response.json()
        
        # 检查API响应是否正常
        if "error_code" in response_data:
            return json.dumps({
                "error": f"API调用错误: {response_data.get('error_msg', '未知错误')}",
                "error_code": response_data.get("error_code")
            })
        
        # 获取模型返回的内容
        result_content = response_data["result"]
        
        # 4. 解析返回结果为所需的JSON结构
        parts = {
            "annotations": "",
            "translation": "",
            "appreciation": "",
            "background": ""
        }
        
        # 分割内容为段落
        sections = result_content.split("\n\n")
        
        # 遍历所有段落，根据标题识别各部分
        for section in sections:
            section = section.strip()
            if not section:
                continue
            
            # 识别注释部分
            if "<ul class=\"space-y-3 text-ink/80\">" in section:
                parts["annotations"] = section
            # 识别译文部分
            elif "<h3 class=\"font-song font-bold text-lg mb-4\">现代文译文</h3>" in section:
                parts["translation"] = section
            # 识别赏析部分
            elif "<h3 class=\"font-song font-bold text-lg mb-4\">诗文赏析</h3>" in section:
                parts["appreciation"] = section
            # 识别创作背景部分
            elif "<h3 class=\"font-song font-bold text-lg mb-4\">创作背景</h3>" in section:
                parts["background"] = section
            # 处理可能的其他情况
            elif parts["annotations"] and not parts["translation"] and not parts["appreciation"] and not parts["background"]:
                # 如果注释已经找到，但其他部分还没找到，可能是注释内容被分割了
                parts["annotations"] += "\n\n" + section
            elif parts["translation"] and not parts["appreciation"] and not parts["background"]:
                # 如果译文已经找到，但赏析和背景还没找到，可能是译文内容被分割了
                parts["translation"] += "\n\n" + section
            elif parts["appreciation"] and not parts["background"]:
                # 如果赏析已经找到，但背景还没找到，可能是赏析内容被分割了
                parts["appreciation"] += "\n\n" + section
            elif parts["background"]:
                # 如果背景已经找到，可能是背景内容被分割了
                parts["background"] += "\n\n" + section
            else:
                # 无法识别的部分，忽略
                pass
        print(json.dumps(parts, ensure_ascii=False, indent=2))
        return json.dumps(parts, ensure_ascii=False, indent=2)
    
    except Exception as e:
        return json.dumps({"error": f"调用API时发生错误: {str(e)}"})

# 示例用法
if __name__ == "__main__":
    # 替换为你的文心一言API密钥
    API_KEY = "WAnriBPwo1XfmqDXw8FBv6iq"
    SECRET_KEY = "aV5Q0hmCpIZsVhm44kZrGult8ylL89zw"
    
    # 示例古诗
    poem = "床前明月光，疑是地上霜。\n举头望明月，低头思故乡。"
    
    # 分析古诗
    # result = analyze_poem(poem, API_KEY, SECRET_KEY)
    # print(result)
    # 解析JSON结果
    # result_json = json.loads(result)
    # print(result_json)
    analyze_poems()
